package startupweekend201311.recipe4u;

import java.util.ArrayList;

import startupweekend201311.recipe4u.fragment.AfterRecipeFragment;
import startupweekend201311.recipe4u.fragment.MyPageFragment;
import startupweekend201311.recipe4u.fragment.SearchRecipeFragment;
import startupweekend201311.recipe4u.fragment.TodayRecipeFragment;

import android.annotation.SuppressLint;
import android.app.ActionBar;
import android.app.Activity;
import android.app.FragmentTransaction;
import android.content.res.Configuration;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.widget.DrawerLayout;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;

@SuppressLint("UseSparseArrays")
public class RecipeMainActivity extends Activity {
    // ListViewインスタンス
    private ListView mDrawerList;
    // DrawerLayoutインスタンス
    private DrawerLayout mDrawerLayout;
    // ActionBarDrawerToggleインスタンス
    private ActionBarDrawerToggle mDrawerToggle;
    // タイトル
    private String mTitle = "";
	// タイトルリスト
    private String[] mTitleList;
    
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_recipe);
		
		// Navigation DrawerのListViewの生成
		mDrawerList = (ListView) findViewById(R.id.navi_drawer);
		// リスト項目選択時イベントの登録
		mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
		// DrawerLayoutの取得
		mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
		// リスト読み込み
		ReLoadList();

		// アイコンをアップナビゲーションとして設定する
		ActionBar actionBar = getActionBar();
		actionBar.setDisplayHomeAsUpEnabled(true);
		actionBar.setHomeButtonEnabled(true);
		actionBar.setDisplayShowTitleEnabled(false);
		actionBar.setIcon(R.drawable.sozai_icon);

		// ActionBarDrawerToggleの生成
		mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
				R.drawable.ic_drawer, R.string.drawer_open,
				R.string.drawer_close) {

			/**
			 * リスト非表示時処理
			 * 
			 * @param view　view
			 */
			public void onDrawerClosed(View view) {
				// アクションバーのタイトル設定
				getActionBar().setTitle(mTitle);
				// メニュー項目表示切替
				invalidateOptionsMenu();
			}

			/**
			 * リスト表示時処理
			 * 
			 * @param drawerView
			 *            drawerView
			 */
			public void onDrawerOpened(View drawerView) {
				// アクションバーのタイトル設定
				getActionBar().setTitle(mTitle);
				// メニュー項目表示切替
				invalidateOptionsMenu();
			}
		};
		// DrawerLayoutに設定する
		mDrawerLayout.setDrawerListener(mDrawerToggle);
		
		TodayRecipeFragment fragment = new TodayRecipeFragment();
		FragmentTransaction ft = getFragmentManager().beginTransaction();
		ft.replace(R.id.recipefragment, fragment);
		ft.commit();
		actionBar.setBackgroundDrawable(new BitmapDrawable(getResources(), 
				BitmapFactory.decodeResource(getResources(), R.drawable.kyou_bar)));
	}
	
	@Override
	protected void onResume() {
		super.onResume();

		// タイトル設定
		//setTitle("今日の献立");
	}

	/**
	 * リスト表示時のメニュー表示切替
	 * @param menu メニュー
	 * @return 成否
	 */
	@Override
	public boolean onPrepareOptionsMenu(Menu menu) {
		//// リストが表示状態になっているかどうか
		//boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
		//// リストが表示状態なら、アクションバーとメニューの項目を表示しないようにする
		//menu.findItem(R.id.menu_mypage).setVisible(!drawerOpen);
		return super.onPrepareOptionsMenu(menu);
	}
    
	/**
	 * オプションメニューの選択
	 */
	@SuppressLint("DefaultLocale")
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// アイコンボタン押下時はここで処理される
		if (mDrawerToggle.onOptionsItemSelected(item)) {
			return true;
		}
		return true;
	}
	

	/**
	 * リスト項目選択時イベントリスナー
	 */
	private class DrawerItemClickListener
		implements ListView.OnItemClickListener {
	    @Override
	    public void onItemClick(AdapterView<?> parent, 
	    		View view, int position, long id) {
	    	SelectedItem(position);
	    }
	}
	
	/**
	 * リストの再読み込み
	 */
	private void ReLoadList() {
		String[] dummyTitleArray = new String[]{"マイページ","今日の献立","明日、明後日の献立","献立を探す"};

		mTitleList = dummyTitleArray;
		if(mTitleList == null) 
		{
			mTitleList = new String[0];
		}
		
		ArrayList<BindData> dataObj = new ArrayList<BindData>();
		for(int i = 0; i < mTitleList.length; i++){
			dataObj.add(new BindData(mTitleList[i]));
		}
		
		// リストに再設定する
		mDrawerList.setAdapter(
				new NaviDrawerAdapter(getApplicationContext(), dataObj));
	}
	
	/**
	 * リスト項目選択処理
	 * @param pos 項目位置
	 */
	private void SelectedItem(int pos) {
		// 選択した項目のチェック設定
		mDrawerList.setItemChecked(pos, false);
		// タイトル設定
		//setTitle(mTitleList[pos]);
		// リストを非表示にする
		mDrawerLayout.closeDrawer(mDrawerList);
		
		FragmentTransaction ft = getFragmentManager().beginTransaction();
		ActionBar actionBar = getActionBar();
		switch (pos) {
			case 0:
				actionBar.setBackgroundDrawable(new BitmapDrawable(getResources(), 
						BitmapFactory.decodeResource(getResources(), R.drawable.mypage_bar)));
				
				MyPageFragment mypage = new MyPageFragment();
				ft.replace(R.id.recipefragment, mypage);
				break;
			case 1:
				actionBar.setBackgroundDrawable(new BitmapDrawable(getResources(), 
						BitmapFactory.decodeResource(getResources(), R.drawable.kyou_bar)));
				
				TodayRecipeFragment today = new TodayRecipeFragment();
				ft.replace(R.id.recipefragment, today);
				break;
			case 2:
				actionBar.setBackgroundDrawable(new BitmapDrawable(getResources(), 
						BitmapFactory.decodeResource(getResources(), R.drawable.asu_bar)));
				
				AfterRecipeFragment after = new AfterRecipeFragment();
				ft.replace(R.id.recipefragment, after);
				break;
			case 3:
				actionBar.setBackgroundDrawable(new BitmapDrawable(getResources(), 
						BitmapFactory.decodeResource(getResources(), R.drawable.kensaku_bar)));
				
				SearchRecipeFragment search = new SearchRecipeFragment();
				ft.replace(R.id.recipefragment, search);
				break;
		}
		//ft.addToBackStack(null);
		ft.commit();
	}
	
	 /**
	 * タイトル設定
	 * @param title タイトル
	 */
	@Override
	public void setTitle(CharSequence title) {
		mTitle = title.toString();
		// アクションバーのタイトル部にファイル名を表示する
		getActionBar().setTitle(mTitle);
	}
	
	/**
	 * onStartとonRestoreInstanceStateの呼出し後の処理
	 * @param savedInstanceState savedInstanceState
	 */
	@Override
	protected void onPostCreate(Bundle savedInstanceState) {
		super.onPostCreate(savedInstanceState);
		// 状態をDrawerLayoutにsyncする
		mDrawerToggle.syncState();
	}
	
	/**
	 * デバイスの状態(回転状態など)の変更時イベント
	 * @param newConfig newConfig
	 */
	@Override
	public void onConfigurationChanged(Configuration newConfig) {
		super.onConfigurationChanged(newConfig);
		// onConfigurationChangedはこのメソッドでいつも呼び出す必要がある
		mDrawerToggle.onConfigurationChanged(newConfig);
	}
}
